package com.pe.pgn.clubpgn.domain;

import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.List;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.SequenceGenerator;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
import javax.persistence.Transient;

import org.apache.commons.collections.FactoryUtils;
import org.apache.commons.collections.ListUtils;
import org.hibernate.annotations.Type;
import org.springframework.format.annotation.DateTimeFormat;

import com.pe.pgn.clubpgn.domain.beans.BNArticulo;
import com.pe.pgn.clubpgn.domain.beans.BNAsignacionArticuloCatalogoDetalle;
import com.pe.pgn.clubpgn.domain.beans.BNPremioCatalogo;

/**
 * @author Edwin Farfan
 */


@Entity
@Table(name = "clpb_documento_mov_articulo")
public class ClpbDocumentoMovArticulo extends CamposAuditoria {
	
	private static final long serialVersionUID = -9119213454884065914L;
	private Long id;
	private Calendar daFechaDocumento;
	private String deProveedor;
	private String deDocumento;
	private ClpbAlmacen clpbAlmacen;
	private Calendar daFecha;
	private ClpbAlmacen clpbAlmacenOrigen;
	private ClpbAlmacen clpbAlmacenDestino;
	private ClpmCatalogo clpmCatalogo;
	private ClpbClientePersona clpbClientePersona;
	private boolean stDocumentoMovArticulo;
	private String stIndicadorTipoDocumento;
	private String deObservaciones;
	private String coCodTarjetaPersonaCanje;
	private String nuSerie;
	private String nuDocumento;
	private BigDecimal vaCantidad;
	private BigDecimal vaPuntosPremio;
	private BigDecimal vaPuntosTotales;
	private BigDecimal vaPrecioPremio;
	private BigDecimal vaPrecioTotal;
	private	boolean stDireccion;
	private	boolean stAlmacenPrincipal;
	private	boolean stPuntoCanje;
	private String deJrAvCa;
	private String deDireccion;
	private String deNumero;
	private String deMzLote;
	private String deDptoPisoInt;
	private String deUrbIndResUnVec;
	private String deSecEtapaZona;
	private ClpmUbigeo clpmUbigeo;
	private String coCodigoTarjetaPersonaDev;
	private Long coDocumentoMovCanje;//consultar estandar
	private ClpmCatalogo clpmCatalogoOrigen;
	private ClpdArticulo clpdArticulo;
	private ClprPremioCatalogo clprPremio;
	
	private List<BNPremioCatalogo> premioDetalle;
	private List<BNAsignacionArticuloCatalogoDetalle> detalle;
	private List<BNArticulo> articulosDetalle;

	private String deFechaDocumento;
	private String coAlmacenOrigen;
	private String coAlmacenDestino;
	private String deAlmacenOrigen;
	private String deAlmacenDestino;
	private String deCatalogo;
	private String deAlmacen;


	@SuppressWarnings("unchecked")
    public ClpbDocumentoMovArticulo() {
    	this.detalle = ListUtils.lazyList(
    	  		new ArrayList<BNAsignacionArticuloCatalogoDetalle>(),
    	  		FactoryUtils.instantiateFactory(BNAsignacionArticuloCatalogoDetalle.class));	
	}
	
	
	@Id
	@Column(name="id")
    @SequenceGenerator(name="seqdocumentomovarticulo", sequenceName="seq_documento_mov_articulo")
    @GeneratedValue(generator="seqdocumentomovarticulo")
	public Long getId() {
		return id;
	}
	
    @Column(name = "da_fecha_documento")
    @Temporal(TemporalType.TIMESTAMP)
    @DateTimeFormat(style = "S-")
	public Calendar getDaFechaDocumento() {
		return daFechaDocumento;
	}
    
    @Column(name = "de_proveedor", length = 100)
    public String getDeProveedor() {
		return deProveedor;
	}

	@Column(name = "de_documento", length = 100)
	public String getDeDocumento() {
		return deDocumento;
	}
    
    @ManyToOne(targetEntity = ClpbAlmacen.class)
    @JoinColumn(name="co_almacen")
	public ClpbAlmacen getClpbAlmacen() {
		return clpbAlmacen;
	}
    
    @Column(name = "da_fecha")
    @Temporal(TemporalType.TIMESTAMP)
    @DateTimeFormat(style = "S-")
	public Calendar getDaFecha() {
		return daFecha;
	}

    @ManyToOne(targetEntity = ClpbAlmacen.class)
    @JoinColumn(name="co_almacen_origen")
	public ClpbAlmacen getClpbAlmacenOrigen() {
		return clpbAlmacenOrigen;
	}
    
    @ManyToOne(targetEntity = ClpdArticulo.class)
    @JoinColumn(name="co_articulo")
	public ClpdArticulo getClpdArticulo() {
		return clpdArticulo;
	}
    
    @ManyToOne(targetEntity = ClpbClientePersona.class)
    @JoinColumn(name="co_cliente_persona",nullable=true)
	public ClpbClientePersona getClpbClientePersona() {
		return clpbClientePersona;
	}
    
    @ManyToOne(targetEntity = ClpbAlmacen.class)
    @JoinColumn(name="co_almacen_destino")
	public ClpbAlmacen getClpbAlmacenDestino() {
		return clpbAlmacenDestino;
	}
    
    @ManyToOne(targetEntity = ClpmCatalogo.class)
    @JoinColumn(name="co_catalogo" )
	public ClpmCatalogo getClpmCatalogo() {
		return clpmCatalogo;
	}
    
    @Column(name = "st_documento_mov_articulo", nullable = false)
	@Type(type = "yes_no")     
	public boolean isStDocumentoMovArticulo() {
		return stDocumentoMovArticulo;
	}
    
    @ManyToOne(targetEntity = ClprPremioCatalogo.class)
    @JoinColumn(name="co_premio")    
	public ClprPremioCatalogo getClprPremio() {
		return clprPremio;
	}
    
    @Column(name = "st_indicador_tipo_documento", nullable = false, length = 200)
	public String getStIndicadorTipoDocumento() {
		return stIndicadorTipoDocumento;
	}
    
    @Column(name = "de_observaciones", length = 255)
	public String getDeObservaciones() {
		return deObservaciones;
	}
    
    @Column(name = "co_cod_tarjeta_persona_canje", length = 20)
	public String getCoCodTarjetaPersonaCanje() {
		return coCodTarjetaPersonaCanje;
	}
    
    @Column(name = "nu_serie", length = 10)
	public String getNuSerie() {
		return nuSerie;
	}
    
    @Column(name = "nu_documento", length = 20)
    public String getNuDocumento() {
		return nuDocumento;
	}

	@Column(name = "va_cantidad")
	public BigDecimal getVaCantidad() {
		return vaCantidad;
	}
    
    @Column(name = "va_puntos_premio")
	public BigDecimal getVaPuntosPremio() {
		return vaPuntosPremio;
	}
    
    @Column(name = "va_puntos_totales")
	public BigDecimal getVaPuntosTotales() {
		return vaPuntosTotales;
	}
    
    @Column(name = "va_precio_premio")
	public BigDecimal getVaPrecioPremio() {
		return vaPrecioPremio;
	}
    
    @Column(name = "va_precio_total")
	public BigDecimal getVaPrecioTotal() {
		return vaPrecioTotal;
	}
    
    @Column(name = "st_direccion")
	@Type(type = "yes_no")    
	public boolean isStDireccion() {
		return stDireccion;
	}
    
    @Column(name = "st_almacen_principal")
	@Type(type = "yes_no")    
	public boolean isStAlmacenPrincipal() {
		return stAlmacenPrincipal;
	}
    
    @Column(name = "st_punto_canje")
	@Type(type = "yes_no")    
	public boolean isStPuntoCanje() {
		return stPuntoCanje;
	}

	@Transient
    public List<BNPremioCatalogo> getPremioDetalle() {
		return premioDetalle;
	}

	public void setPremioDetalle(List<BNPremioCatalogo> premioDetalle) {
		this.premioDetalle = premioDetalle;
	}

	@Column(name = "de_jr_av_ca", length = 10)    
	public String getDeJrAvCa() {
		return deJrAvCa;
	}
    
    @Column(name = "de_direccion", length = 50)
	public String getDeDireccion() {
		return deDireccion;
	}
    
    @Column(name = "de_numero", length = 50)
	public String getDeNumero() {
		return deNumero;
	}
    
    @Column(name = "de_mz_lote", length = 50)
	public String getDeMzLote() {
		return deMzLote;
	}
    
    @Column(name = "de_dpto_piso_int", length = 50)
	public String getDeDptoPisoInt() {
		return deDptoPisoInt;
	}
    
    @Column(name = "de_urb_ind_res_un_vec", length = 50)
	public String getDeUrbIndResUnVec() {
		return deUrbIndResUnVec;
	}
    
    @Column(name = "de_sec_etapa_zona", length = 50)
	public String getDeSecEtapaZona() {
		return deSecEtapaZona;
	}
    
    @ManyToOne(targetEntity = ClpmUbigeo.class)
    @JoinColumn(name="co_ubigeo" )
	public ClpmUbigeo getClpmUbigeo() {
		return clpmUbigeo;
	}
    
    @Column(name = "co_codigo_tarjeta_persona_dev", length = 20)
	public String getCoCodigoTarjetaPersonaDev() {
		return coCodigoTarjetaPersonaDev;
	}
    
    @Column(name = "co_documento_mov_canje")
	public Long getCoDocumentoMovCanje() {
		return coDocumentoMovCanje;
	}
    
    @ManyToOne(targetEntity = ClpmCatalogo.class)
    @JoinColumn(name="co_catalogo_origen" )
	public ClpmCatalogo getClpmCatalogoOrigen() {
		return clpmCatalogoOrigen;
	} 
    
	@Column(name = "co_usuario_creador", updatable = false, nullable = false, length = 30)
	public String getCoUsuarioCreador() {
		return coUsuarioCreador;
	}

    @Column(name = "da_fecha_creacion", updatable = false, nullable = false)
    @Temporal(TemporalType.TIMESTAMP)
    @DateTimeFormat(style = "S-")
	public Calendar getDaFechaCreacion() {
		return daFechaCreacion;
	}

	@Column(name = "co_usuario_modificador", length = 30)
	public String getCoUsuarioModificador() {
		return coUsuarioModificador;
	}

    @Column(name = "da_fecha_modificacion")
    @Temporal(TemporalType.TIMESTAMP)
    @DateTimeFormat(style = "S-")
	public Calendar getDaFechaModificacion() {
		return daFechaModificacion;
	}		        
	


	public void setId(Long id) {
		this.id = id;
	}

	public void setDaFechaDocumento(Calendar daFechaDocumento) {
		this.daFechaDocumento = daFechaDocumento;
	}

	public void setDeProveedor(String deProveedor) {
		this.deProveedor = deProveedor;
	}

	public void setDeDocumento(String deDocumento) {
		this.deDocumento = deDocumento;
	}

	public void setClpbAlmacen(ClpbAlmacen clpbAlmacen) {
		this.clpbAlmacen = clpbAlmacen;
	}

	public void setDaFecha(Calendar daFecha) {
		this.daFecha = daFecha;
	}

	public void setClpbAlmacenOrigen(ClpbAlmacen clpbAlmacenOrigen) {
		this.clpbAlmacenOrigen = clpbAlmacenOrigen;
	}
	
	public void setClpbClientePersona(ClpbClientePersona clpbClientePersona) {
		this.clpbClientePersona = clpbClientePersona;
	}

	public void setClprPremio(ClprPremioCatalogo clprPremio) {
		this.clprPremio = clprPremio;
	}
	
	public void setClpbAlmacenDestino(ClpbAlmacen clpbAlmacenDestino) {
		this.clpbAlmacenDestino = clpbAlmacenDestino;
	}
	
	public void setClpdArticulo(ClpdArticulo clpdArticulo) {
		this.clpdArticulo = clpdArticulo;
	}

	public void setClpmCatalogo(ClpmCatalogo clpmCatalogo) {
		this.clpmCatalogo = clpmCatalogo;
	}

	public void setStDocumentoMovArticulo(boolean stDocumentoMovArticulo) {
		this.stDocumentoMovArticulo = stDocumentoMovArticulo;
	}

	public void setStIndicadorTipoDocumento(String stIndicadorTipoDocumento) {
		this.stIndicadorTipoDocumento = stIndicadorTipoDocumento;
	}

	public void setDeObservaciones(String deObservaciones) {
		this.deObservaciones = deObservaciones;
	}

	public void setCoCodTarjetaPersonaCanje(String coCodTarjetaPersonaCanje) {
		this.coCodTarjetaPersonaCanje = coCodTarjetaPersonaCanje;
	}

	public void setNuSerie(String nuSerie) {
		this.nuSerie = nuSerie;
	}
	
	public void setNuDocumento(String nuDocumento) {
		this.nuDocumento = nuDocumento;
	}


	public void setVaCantidad(BigDecimal vaCantidad) {
		this.vaCantidad = vaCantidad;
	}

	public void setVaPuntosPremio(BigDecimal vaPuntosPremio) {
		this.vaPuntosPremio = vaPuntosPremio;
	}

	public void setVaPuntosTotales(BigDecimal vaPuntosTotales) {
		this.vaPuntosTotales = vaPuntosTotales;
	}

	public void setVaPrecioPremio(BigDecimal vaPrecioPremio) {
		this.vaPrecioPremio = vaPrecioPremio;
	}

	public void setVaPrecioTotal(BigDecimal vaPrecioTotal) {
		this.vaPrecioTotal = vaPrecioTotal;
	}

	public void setStDireccion(boolean stDireccion) {
		this.stDireccion = stDireccion;
	}

	public void setStAlmacenPrincipal(boolean stAlmacenPrincipal) {
		this.stAlmacenPrincipal = stAlmacenPrincipal;
	}

	public void setStPuntoCanje(boolean stPuntoCanje) {
		this.stPuntoCanje = stPuntoCanje;
	}

	public void setDeJrAvCa(String deJrAvCa) {
		this.deJrAvCa = deJrAvCa;
	}

	public void setDeDireccion(String deDireccion) {
		this.deDireccion = deDireccion;
	}

	public void setDeNumero(String deNumero) {
		this.deNumero = deNumero;
	}

	public void setDeMzLote(String deMzLote) {
		this.deMzLote = deMzLote;
	}

	public void setDeDptoPisoInt(String deDptoPisoInt) {
		this.deDptoPisoInt = deDptoPisoInt;
	}

	public void setDeUrbIndResUnVec(String deUrbIndResUnVec) {
		this.deUrbIndResUnVec = deUrbIndResUnVec;
	}

	public void setDeSecEtapaZona(String deSecEtapaZona) {
		this.deSecEtapaZona = deSecEtapaZona;
	}

	public void setClpmUbigeo(ClpmUbigeo clpmUbigeo) {
		this.clpmUbigeo = clpmUbigeo;
	}

	public void setCoCodigoTarjetaPersonaDev(String coCodigoTarjetaPersonaDev) {
		this.coCodigoTarjetaPersonaDev = coCodigoTarjetaPersonaDev;
	}

	public void setCoDocumentoMovCanje(Long coDocumentoMovCanje) {
		this.coDocumentoMovCanje = coDocumentoMovCanje;
	}

	public void setClpmCatalogoOrigen(ClpmCatalogo clpmCatalogoOrigen) {
		this.clpmCatalogoOrigen = clpmCatalogoOrigen;
	}

	@Override
	public boolean equals(Object o) {
		return false;
	}

	@Override
	public int hashCode() {
		return 0;
	}

	@Override
	public String toString() {
		return this.deDocumento;
	}
	
	
	@Transient
	public List<BNAsignacionArticuloCatalogoDetalle> getDetalle() {
		return detalle;
	}    
    
	public void setDetalle(List<BNAsignacionArticuloCatalogoDetalle> detalle) {
		this.detalle = detalle;
	}
	
	@Transient
	public List<BNArticulo> getArticulosDetalle() {
		return articulosDetalle;
	}    
	public void setArticulosDetalle(List<BNArticulo> articulosDetalle) {
		this.articulosDetalle = articulosDetalle;
	}

	@Transient	
	public String getDeFechaDocumento() {
		return deFechaDocumento;
	}


	public void setDeFechaDocumento(String deFechaDocumento) {
		this.deFechaDocumento = deFechaDocumento;
	}

	@Transient	
	public String getDeAlmacenOrigen() {
		return deAlmacenOrigen;
	}


	public void setDeAlmacenOrigen(String deAlmacenOrigen) {
		this.deAlmacenOrigen = deAlmacenOrigen;
	}

	@Transient	
	public String getDeAlmacenDestino() {
		return deAlmacenDestino;
	}

	public void setDeAlmacenDestino(String deAlmacenDestino) {
		this.deAlmacenDestino = deAlmacenDestino;
	}

	@Transient
	public String getDeCatalogo() {
		return deCatalogo;
	}

	public void setDeCatalogo(String deCatalogo) {
		this.deCatalogo = deCatalogo;
	}

	@Transient
	public String getDeAlmacen() {
		return deAlmacen;
	}

	public void setDeAlmacen(String deAlmacen) {
		this.deAlmacen = deAlmacen;
	}

	@Transient
	public String getCoAlmacenOrigen() {
		return coAlmacenOrigen;
	}

	public void setCoAlmacenOrigen(String coAlmacenOrigen) {
		this.coAlmacenOrigen = coAlmacenOrigen;
	}

	@Transient
	public String getCoAlmacenDestino() {
		return coAlmacenDestino;
	}

	public void setCoAlmacenDestino(String coAlmacenDestino) {
		this.coAlmacenDestino = coAlmacenDestino;
	}
}
